package com.honeycomb.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SystemValidate {

	/**
	 * 验证非空 目前只验证了字符串和List
	 * 
	 * @author Wangyu
	 * 
	 * @return true:空 false:非空
	 */
	public static boolean isEmpty(Object obj) {
		if (obj == null) {
			return true;
		}
		// 判断字符串
		if (obj instanceof String) {
			String str = (String) obj;
			if (str.trim().length() == 0) {
				return true;
			}
		}
		// 判断列表
		if (obj instanceof List) {
			List list = (List) obj;
			if (list.size() == 0) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 验证传入值
	 * 
	 * @author Wangyu
	 * @param str
	 *            input value
	 * @param min
	 *            min length
	 * @param max
	 *            max length
	 * @param type
	 *            (只含有下面说明的) 
	 *            0代表含有数字 
	 *            a代表含有小写字母 
	 *            A代表含有大写字母 
	 *            _代表含有下划线
	 *             
	 *            E或e代表邮箱验证
	 * @return true:正确 false:错误
	 */
	public static boolean validateInput(String str, int min, int max, String type) {
		if (isEmpty(str)) {
			return false;
		}
		int len = str.trim().length();
		if (len < min || len > max) {
			return false;
		}

		String vali = "[";
		if (type.contains("0")) {
			vali += "0-9";
		}
		if (type.contains("a")) {
			vali += "a-z";
		}
		if (type.contains("A")) {
			vali += "A-Z";
		}
		if (type.contains("_")) {
			vali += "_";
		}
		vali += "]{" + min + "," + max + "}";
		if (type.equals("E") || type.equals("e")) {
			vali = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
		}
		Pattern pat = Pattern.compile(vali);
		Matcher mat = pat.matcher(str);
		if (mat.matches()) {
			return true;
		}
		return false;
	}

	public static boolean validateInput(String str, String type) {
		return validateInput(str, 0, 255, type);
	}

	/**
	 * 验证时间格式是否正确
	 * 
	 * @author Wangyu
	 * @param str
	 *            input value
	 * @param pattern
	 *            时间格式："yyyy-MM-dd HH:mm:ss" "yyyyMMdd" "HH:mm:ss" 或者其他的正确格式
	 * @return true:正确 false:错误
	 */
	public static boolean validateDate(String str, String pattern) {
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		try {
			sdf.parse(str);
		} catch (ParseException e) {
			return false;
		}
		return true;
	}

	/**
	 * 验证是否是数字
	 * 
	 * @author Wangyu
	 * @param str
	 *            input value
	 * @return true:正确 false:错误
	 */
	public static boolean isNumber(String str) {
		try {
			Integer.parseInt(str);
		} catch (NumberFormatException e) {
			return false;
		}
		return true;
	}

}
